package br.senai.sc.controller;

import java.io.Serializable;
import java.math.BigDecimal;

import br.senai.sc.controller.business.IQABusiness;
import br.senai.sc.model.Amostra;

/**
 * Representa um parâmetro da {@link Amostra}.
 * 
 * @author Tiago
 */
public class Parametro implements Serializable {

	private static final long serialVersionUID = 1L;

	private Descricao descricao;

	private BigDecimal valor;

	private BigDecimal iqa;

	private Amostra amostra;

	/**
	 * Representa a descrição dos {@link Parametro} das {@link Amostra}.
	 * 
	 * @author Tiago
	 * 
	 */
	public enum Descricao {

		COLIFORMES_FECAIS("Coliformes Fecais"), DBO("DBO"),

		/**
		 * Fósforo total
		 */
		PT("Fósforo Total"),

		/**
		 * Nitrogêneo Total
		 */
		NT("Nitrogêneo Total"),

		/**
		 * Oxigênio Dissolvido
		 */
		OD("Oxigênio Dissolvido"), PH("Ph"),

		/**
		 * Sólidos Totais
		 */
		ST("Sólidos Totais"), TEMPERATURA("Temperatura"), TURBIDEZ("Turbidez");

		private String descricao;

		private Descricao(String descricao) {
			this.descricao = descricao;
		}

		public String getValor() {
			return descricao;
		}
	}

	public Parametro(Descricao descricao, BigDecimal valor, BigDecimal iqa,
			Amostra amostra) {
		this.descricao = descricao;
		this.valor = valor.setScale(2, IQABusiness.ROUND_MODE);
		this.iqa = iqa;
		this.amostra = amostra;
	}

	public Descricao getDescricao() {
		return descricao;
	}

	public BigDecimal getValor() {
		return valor;
	}

	public BigDecimal getIqa() {
		return iqa;
	}

	public Amostra getAmostra() {
		return amostra;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = (prime * result)
				+ ((descricao == null) ? 0 : descricao.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (getClass() != obj.getClass()) {
			return false;
		}
		Parametro other = (Parametro) obj;
		if (descricao == null) {
			if (other.descricao != null) {
				return false;
			}
		} else if (!descricao.equals(other.descricao)) {
			return false;
		}
		return true;
	}
}